/*
 * @lc app=leetcode.cn id=714 lang=cpp
 *
 * [714] 买卖股票的最佳时机含手续费
 */

// @lc code=start
class Solution
{
public:
    int maxProfit(vector<int> &prices, int fee)
    {
        //买卖股票升级版 加了个手续费
        //首先记录当前最低价 如果遇到比最低价高且减去手续费后还有利润的就卖掉
        //上当了 不能直接卖掉 因为收获利润的这一天可能并不是收获利润区间里的最后一天
        //相当于如果当前有利润 叫浮盈如果后面能卖的更多 就后面卖 否则就现在卖
        int minprice = INT32_MAX;
        int res = 0;
        for (int i = 0; i < prices.size(); i++)
        {
            if (prices[i] - fee > minprice)
            {
                //如果当前卖出能赚钱
                res += prices[i] - minprice - fee;
                //暂时持有 如果后面能卖的更多就后面卖
                //res = prices[i]-minprice-fee+prices[n]-(prices[i] - fee)-fee
                //res = prices[n]-fee-minprice
                minprice = prices[i] - fee; //核心代码
            }
            else
            {
                //如果卖出不能赚钱 更新minprice
                minprice = min(minprice, prices[i]);
            }
        }
        return res;
    }
};
// @lc code=end
